package br.com.jk.email;

import br.com.jk.cliente.Cliente;
import br.com.jk.empresa.Empresa;
import br.com.jk.entidade.Entidade;
import br.com.jk.fornecedor.Fornecedor;
import java.io.Serializable;
import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
 *
 * @author camilo
 */
@Entity
@Table(name = EmailDao.NAME_TABLE)
public class Email implements Serializable {

  public static final int EMAIL_CLIENTE = 0;
  public static final int EMAIL_FORNECEDOR = 1;
  public static final int EMAIL_EMPRESA = 2;
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private int id;
  @Column(nullable = false)
  private int tipoEntidade;
  @Column(name = EmailDao.NAME_COLUMN_EMAIL, nullable = false)
  private String endEmail;
  @Column(name = EmailDao.NAME_COLUMN_NOME, nullable = false)
  private String nome;
  @Column(name = EmailDao.NAME_COLUMN_RESIDENCIAL, nullable = false)
  private Boolean residencial;
  @ManyToOne
  @JoinColumn(name = EmailDao.NAME_COLUMN_ID_FORNECEDOR)
  private Fornecedor fornecedor;
  @ManyToOne
  @JoinColumn(name = EmailDao.NAME_COLUMN_ID_CLIENTE)
  private Cliente cliente;
  @ManyToOne
  @JoinColumn(name = EmailDao.NAME_COLUMN_ID_EMPRESA)
  private Empresa empresa;

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public int getTipoEntidade() {
    return tipoEntidade;
  }

  public void setTipoEntidade(int tipoEntidade) {
    this.tipoEntidade = tipoEntidade;
  }

  public String getEndEmail() {
    return endEmail;
  }

  public void setEndEmail(String endEmail) {
    this.endEmail = endEmail;
  }

  public String getNome() {
    return nome;
  }

  public void setNome(String nome) {
    this.nome = nome;
  }

  public Boolean getResidencial() {
    return residencial;
  }

  public void setResidencial(Boolean residencial) {
    this.residencial = residencial;
  }

  public Fornecedor getFornecedor() {
    return fornecedor;
  }

  public void setFornecedor(Fornecedor fornecedor) {
    this.fornecedor = fornecedor;
  }

  public Cliente getCliente() {
    return cliente;
  }

  public void setCliente(Cliente cliente) {
    this.cliente = cliente;
  }

  public Empresa getEmpresa() {
    return empresa;
  }

  public void setEmpresa(Empresa empresa) {
    this.empresa = empresa;
  }

  @Override
  public int hashCode() {
    int hash = 7;
    hash = 59 * hash + this.id;
    hash = 59 * hash + this.tipoEntidade;
    hash = 59 * hash + Objects.hashCode(this.endEmail);
    hash = 59 * hash + Objects.hashCode(this.nome);
    hash = 59 * hash + Objects.hashCode(this.residencial);
    hash = 59 * hash + Objects.hashCode(this.fornecedor);
    hash = 59 * hash + Objects.hashCode(this.cliente);
    hash = 59 * hash + Objects.hashCode(this.empresa);
    return hash;
  }

  @Override
  public boolean equals(Object obj) {
    if (obj == null) {
      return false;
    }
    if (getClass() != obj.getClass()) {
      return false;
    }
    final Email other = (Email) obj;
    if (this.id != other.id) {
      return false;
    }
    if (this.tipoEntidade != other.tipoEntidade) {
      return false;
    }
    if (!Objects.equals(this.endEmail, other.endEmail)) {
      return false;
    }
    if (!Objects.equals(this.nome, other.nome)) {
      return false;
    }
    if (!Objects.equals(this.residencial, other.residencial)) {
      return false;
    }
    if (!Objects.equals(this.fornecedor, other.fornecedor)) {
      return false;
    }
    if (!Objects.equals(this.cliente, other.cliente)) {
      return false;
    }
    if (!Objects.equals(this.empresa, other.empresa)) {
      return false;
    }
    return true;
  }
}
